﻿Public Class Kunde
    Inherits Person

    Public Property fakturaadresse As String
    Public Property rabattFaktor As Double
    Public Property abonnementID As Integer

    'Public Shared valgtKunde As Kunde

    Public Sub New(ByVal innlestId As ULong)
        Dim sqlStreng As String = "SELECT * FROM person INNER JOIN kunde ON person.personId = kunde.kundeNr WHERE personId='" & innlestId & "'"
        Dim resultat As DataTable = Database.Query(sqlStreng)
        Try

            id = innlestId
            fornavn = resultat.Rows(0).Item("personForNavn")
            etternavn = resultat.Rows(0).Item("personEtterNavn")
            adresse = resultat.Rows(0).Item("personAdresse")
            epost = resultat.Rows(0).Item("personEpost")
            mobil = resultat.Rows(0).Item("personMobilTlf")
            fakturaadresse = resultat.Rows(0).Item("kundeFakturaAdresse")
            rabattFaktor = resultat.Rows(0).Item("kundeRabattFaktor")
            abonnementID = resultat.Rows(0).Item("abonnementId")
        Catch ex As Exception
            MsgBox("Dette gikk ikke fordi " & ex.Message)

        End Try
    End Sub

    Public Sub New()

    End Sub

    Public Sub Lagre()
        Dim sjekkExist As DataTable = Database.Query("SELECT * FROM person INNER JOIN kunde ON person.personId = kunde.kundeNr WHERE kunde.kundeNr = '" & id & "'")

        If sjekkExist.Rows.Count = 1 Then 'Da betyr det at kunden allerede finnes i databasen og det skal kjøres UPDATE

            Try
                Dim sql As String = "UPDATE person INNER JOIN kunde ON person.personId = kunde.kundeNr SET"
                sql = sql & " person.personForNavn ='" & fornavn
                sql = sql & "', person.personEtterNavn ='" & etternavn
                sql = sql & "', person.personAdresse ='" & adresse
                sql = sql & "', person.personEpost ='" & epost
                sql = sql & "', person.personMobilTlf ='" & mobil
                sql = sql & "', kunde.kundeFakturaAdresse ='" & fakturaadresse
                sql = sql & "', kunde.kundeRabattFaktor ='" & rabattFaktor.ToString.Replace(",", ".") 'Bytter ut komma med punktum for å passe i sql-syntax
                sql = sql & "', kunde.abonnementId ='" & abonnementID
                sql = sql & "'  WHERE person.personId = '" & id & "'"

                Database.Query(sql)
            Catch ex As Exception
                MsgBox("Dette gikk ikke fordi " & ex.Message)

            End Try
        Else 'Dersom denne kunden ikke finnes fra før i databasen må den opprettes ved å kjøre en INSERT
            Try
                Dim sql As String = "INSERT INTO person (personForNavn, personEtterNavn, personAdresse, personEpost, personMobilTlf) "
                sql = sql & "VALUES ('" & fornavn & "', '" & etternavn & "', '" & adresse & "', '" & epost & "', '" & mobil & "')"
                'Setter inn en ny rad i tabellen person, og fyller inn eventuelle felt som er fylt ut. 

                Database.Query(sql)

                Dim sql2 As String = "SELECT personId FROM person ORDER BY personId DESC LIMIT 1"
                'Søker opp personId som nettopp ble opprettet ved å sortere ut høyeste tall

                Dim sql3 As String = "INSERT INTO kunde (kundeNr, kundeFakturaAdresse, kundeRabattFaktor, abonnementId)"
                sql3 = sql3 & "VALUES ('" & Database.Query(sql2).Rows(0).Item("personId").ToString & "', '" & fakturaadresse & "', '" & rabattFaktor & "', " & "'" & abonnementID & "')"
                'Setter inn en ny rad i tabellen kunde, og fyller inn eventuelle felt


                Database.Query(sql3)

            Catch ex As Exception
                MsgBox("Dette gikk dårlig fordi " & ex.Message)

            End Try

        End If

    End Sub

    Public Shared Function Finn(Optional ByVal fornavn As String = "", Optional ByVal etternavn As String = "", Optional ByVal adresse As String = "", Optional ByVal epost As String = "", Optional ByVal mobil As String = "") As DataTable

        Dim søkestreng As String = "SELECT * FROM person INNER JOIN kunde ON person.personId = kunde.kundeNr WHERE person.personForNavn LIKE '%"

        søkestreng = søkestreng & fornavn & "%' AND person.personEtterNavn LIKE '%"
        søkestreng = søkestreng & etternavn & "%' AND person.personAdresse LIKE '%"
        søkestreng = søkestreng & adresse & "%' AND person.personEpost LIKE '%"
        søkestreng = søkestreng & epost & "%' AND person.personMobilTlf LIKE '%"
        søkestreng = søkestreng & mobil & "%' "

        Dim kundeListe As New DataTable             'Endra hele funksjonen til å returnere en DataTable for å få samme datatype som returneres fra Query'en
        kundeListe = Database.Query(søkestreng)     'da blir det litt enklere å håndtere i DataGridView -Espen

        Return kundeListe

    End Function


    'ny funksjon, denne returnerer en type List(Of Kunde)
    Public Shared Function FinnAlle() As List(Of Kunde)

        Dim søkestreng As String = "SELECT * FROM person INNER JOIN kunde ON person.personId = kunde.kundeNr"

        Dim kundeListe As New DataTable
        kundeListe = Database.Query(søkestreng)

        Dim kl As New List(Of Kunde)

        Dim row As DataRow
        For Each row In kundeListe.Rows
            Dim enKunde As New Kunde
            enKunde.id = row("personId")
            enKunde.fornavn = row("personForNavn")
            enKunde.etternavn = row("personEtterNavn")
            enKunde.adresse = row("personAdresse")
            enKunde.epost = row("personEpost")
            enKunde.mobil = row("personMobilTlf")
            enKunde.fakturaadresse = row("kundeFakturaAdresse")
            enKunde.rabattFaktor = row("kundeRabattFaktor")
            enKunde.abonnementID = row("abonnementId")

            kl.Add(enKunde)

        Next row
        'returnerer en liste med alle kunde objektene fra databasen
        Return kl

    End Function


End Class
